package br.com.simulador.session;

import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.framework.EntityHome;
import org.jboss.seam.international.StatusMessage.Severity;
import org.jboss.seam.international.StatusMessages;

import br.com.simulador.model.ItemQuestao;
import br.com.simulador.model.Questao;
import br.com.simulador.model.Simulado;
import br.com.simulador.model.StatusSimulado;
import br.com.simulador.model.Tag;

@Name("simuladoHome")

public class SimuladoHome extends EntityHome<Simulado> {

	@In
	StatusMessages statusMessages;
	
	@In(create = true)
	StatusSimuladoHome statusSimuladoHome;
	
	@In(create = true)
	QuestaoList questaoList;
	
	@In()
	EntityManager entityManager;
	
	
	@In(create = true)
	TagList tagList;
	
	
	

	
	@DataModelSelection("listQuestao")

	private Questao questao;
	
	@DataModelSelection("listItensQuestao")

	private ItemQuestao itemQuestao;
	
	
	private Long questaoId;
	
	
	public Long getQuestaoId() {
		return questaoId;
	}

	private String listTags;
	
	private String listTagsQuestao;

	public void setSimuladoId(Long id) {
		setId(id);
	}

	public Long getSimuladoId() {
		return (Long) getId();
	}

	@Override
	protected Simulado createInstance() {
		Simulado simulado = new Simulado();
		return simulado;
	}

	public void load() {
		if (isIdDefined()) {
			wire();
		}
		
	}

	public void wire() {
		getInstance();
		StatusSimulado status = statusSimuladoHome.getDefinedInstance();
		if (status != null) {
			getInstance().setStatus(status);
		}
		listTags = tagList.loadTags(instance.getTags());
	}

	public boolean isWired() {
		return true;
	}

	public Simulado getDefinedInstance() {
		return isIdDefined() ? getInstance() : null;
	}

	public String getListTags() {
		return listTags;
	}

	public void setListTags(String listTags) {
		this.listTags = listTags;
	}

	@Override
	public String persist() {
		tagList.parseTags(listTags, instance.getTags());
		return super.persist();
	}

	@Override
	public String update() {
		tagList.parseTags(listTags, instance.getTags());
		return super.update();
	}
	

	
	public String addQuestao(){
		
		questao = new Questao();
		questao.setSimulado(instance);
		instance.getQuestoes().add(questao);
		return "/pages/QuestaoEdit.xhtml";
	}

	public void saveQuestao(){
		if(questao!=null){
			entityManager.persist(questao);
			entityManager.flush();
		}
		statusMessages.add(Severity.INFO, "Questão Salva com sucesso");
	}
	
	public void deleteQuestao(){
		if(questao!=null){
			entityManager.remove(questao);
			entityManager.flush();
			statusMessages.add(Severity.INFO, "Questão removida com sucesso");
		}		
	}
	
	public String newItemQuestao(){
		itemQuestao = new ItemQuestao();
		itemQuestao.setQuestao(questao);
		questao.getListItemQuestoes().add(itemQuestao);
		return null;
	}	
	
	public Questao getQuestao() {
		return questao;
	}

	public void setQuestao(Questao questao) {
		this.questao = questao;
	}
	
	@DataModel("listQuestao")
	public List<Questao> getListQuestao() {
		if(instance!=null){
			return  instance.getQuestoes();
		}
		else{
			return null;
		}
	}
	
	@DataModel("listItensQuestao")
	public List<ItemQuestao> getListItensQuestao() {
		if(questao!=null){
			return  questao.getListItemQuestoes();
		}
		else{
			return null;
		}
	}
	public String getListTagsQuestao() {
		if(questao != null){
			return tagList.loadTags(questao.getTags());
		}
		else{
			return null;
		}
	}

	public void setListTagsQuestao(String listTagsQuestao) {
		
		if(questao != null){
			tagList.parseTags(listTagsQuestao, questao.getTags());
		}

	}

	public ItemQuestao getItemQuestao() {
		return itemQuestao;
	}

	public void setItemQuestao(ItemQuestao itemQuestao) {
		this.itemQuestao = itemQuestao;
	}

	
	public void deleteItem(){
		if(questao != null && itemQuestao != null){
			questao.getListItemQuestoes().remove(itemQuestao);
		}
	}
	
	public void setQuestaoId(Long id){
		questaoId = id;
		questao = questaoList.getByID(id);
	}

}
